# -*- coding: utf-8 -*-
"""
# @created on : 9月 2021/9/26 09:01
# @author     : kevin
# @file       : excel.py
# @software   : PyCharm
# @project    : auto_keyword_data


@license: (C) Copyright 2019-2025, Corporation Limited.
@desc:
"""
import pandas as pd
import openpyxl
from utils.path import OperationPath
from common.log import Logger
import os


class OperationExcel:
    def __init__(self, sheet_name, file=None):
        """
        初始化获取文件及对应的sheet,如果文件为空则使用data下的case文件，
        如果sheet为空则默认打开suit的sheet，
        获取到的sheet文件赋值给self.data
        :param file:
        :param sheet_name:
        """
        self.path = OperationPath()
        if file:
            self.file = file
        else:
            self.file = os.path.join(self.path.get_current_path(), 'data', 'case.xlsx')
        self.sheet = sheet_name
        self.data = self.get_data()
        self.logger = Logger()

    def get_data(self):
        """
        通过pandas的read_excel读取文件的sheet内容
        :return:
        """
        sheet = pd.read_excel(self.file, self.sheet)
        return sheet

    def get_lines(self):
        """
        获取数据行数，其中行数不包括索引行
        :return: 实际业务数据行数
        """
        return len(self.data)

    def get_cell_value(self, row, index):
        """
        使用内置索引获取单元格内的值
        :param row: 索引行，不包含标题，实际数据第一行索引为0,为了与实际数据行数对应，传入值做了 -1处理，传入时传入实际ID即可
        :param col: 列索引
        :return: 内置索引单元格对应的值
        """
        if row < 1:
            row = 1
        return self.data.loc[row - 1, index]

    def get_id_by_value(self, index, value):
        """
        通过列名和值返回该列对应的ID，如果有多个值相同时，只返回第一个值对应的ID
        :param index:
        :param value:
        :return:
        """
        for i in range(1, self.get_lines()):
            if self.get_cell_value(i, index) == value:
                return i

    def set_cell_value(self, row, col, value):
        """
        写入单元格内容，为了对应excel中的ID，对传入的row做了+1操作
        :param row: 要写入数据ID
        :param col:要写入的列值
        :param value:需要写入的内容
        :return:
        """
        wb = openpyxl.load_workbook(self.file)
        sheet = wb.get_sheet_by_name(self.sheet)
        sheet.cell(row+1, col).value = value
        wb.save(self.file)
        self.logger.logger('info', f'{self.sheet} 更新表格（{row+1}, {col}）内容为:{value} 完成!')

